<?php

namespace App\Handlers\Contact;

use Hanson\Vbot\Contact\Friends;
use Hanson\Vbot\Contact\Groups;
use Hanson\Vbot\Message\Emoticon;
use Hanson\Vbot\Message\File;
use Hanson\Vbot\Message\Image;
use Hanson\Vbot\Message\Text;
use Hanson\Vbot\Message\Video;
use Hanson\Vbot\Message\Voice;
use Illuminate\Support\Collection;

class Tian
{
    public static function messageHandler(Collection $message, Friends $friends, Groups $groups)
    {
        vbot('console')->log('消息来源的昵称:' . $message['from']['NickName']);

        if ($message['from']['NickName'] === '所有的伟大 源于一个勇敢的开始') {
            if ($message['type'] === 'text') {
                if ($message['content'] === 'hi') {
                    Text::send($message['from']['UserName'], 'hi');
                }
                if ($message['content'] === 'object') {
                    vbot('console')->log($friends->getObject('所有的伟大 源于一个勇敢的开始', 'NickName'));
                    print_r($friends->getObject('所有的伟大 源于一个勇敢的开始', 'NickName'));
                }
            }

            /**
             * 图片
             */
            // 图片是资源文件之一，在配置项可配置是否自动下载。

            // type:image

            // 特有属性
            // 没有特有属性
            if ($message['type'] === 'image') {
                // 下载图片至默认路径
                // Image::download($message);

                // 下载图片到自定义路径或自定义处理
                // Image::download($message, function ($resource) {
                //     // file_put_contents(public_path('uploads/images/curry.jpg'), $resource);
                //     file_put_contents(__DIR__ . '../../../public/uploads/images/curry.jpg', $resource);
                // });

                // 直接传 $message 便能直接发送该 message 的图片
                Image::send($message['from']['UserName'], $message);

                // 也可以选择一个图片路径
                // Image::send($message['from']['UserName'], __DIR__.'/test1.jpg');
            }

            /**
             * 语音
             */
            // 语音是资源文件之一，在配置项可配置是否自动下载。语音也能发送，只是以文件的形式发送。

            // type:voice

            // 特有属性
            // 没有特有属性
            if ($message['type'] === 'voice') {
                // 下载语音至默认路径
                // Voice::download($message);

                // 下载语音到自定义路径或自定义处理
                // Voice::download($message, function ($resource) {
                //     file_put_contents(__DIR__.'/test1.mp3', $resource);
                // });

                // 直接传 $message 便能直接发送该 message 的语音
                Voice::send($message['from']['UserName'], $message);

                // 也可以选择一个语音路径
                // Voice::send($message['from']['UserName'], __DIR__.'/test1.mp3');
            }

            /**
             * 视频
             */
            // 视频是资源文件之一，在配置项可配置是否自动下载。

            // 下载失败
            // 微信网页端并非全部视频都能打开，所以，当你看到 download file failed 的时候别惊讶，那不是 Vbot 的bug

            // type:video

            // 特有属性
            // 没有特有属性
            if ($message['type'] === 'video') {
                // 下载视频至默认路径
                // Video::download($message);

                // 下载视频到自定义路径或自定义处理
                // Video::download($message, function($resource){
                //     file_put_contents(__DIR__.'/test1.mp4', $resource);
                // });

                // 直接传 $message 便能直接发送该 message 的视频
                Video::send($message['from']['UserName'], $message);

                // 也可以选择一个视频路径
                // Video::send($message['from']['UserName'], __DIR__.'/test1.mp4');
            }

            /**
             * 表情
             */
            // 表情是资源文件之一，在配置项可配置是否自动下载。

            // 下载失败
            // 有时会出现下载表情失败的情况，那是因为表情商城的表情需添加后才可发送。

            // type:emoticon

            // 特有属性
            // 没有特有属性
            if ($message['type'] === 'emoticon') {
                // 下载表情至默认路径
                // Emoticon::download($message);

                // 下载表情到自定义路径或自定义处理
                // Emoticon::download($message, function ($resource) {
                //     file_put_contents(__DIR__.'/test.gif', $resource);
                // });

                // 直接传 $message 便能直接发送该 message 的表情
                Emoticon::send($message['from']['UserName'], $message);

                // 也可以选择一个表情路径
                // Emoticon::send($message['from']['UserName'], __DIR__.'/test.gif');

                // 或者从表情库随机抽取一个进行发送
                Emoticon::sendRandom($message['from']['UserName']);
            }

            /**
             * 文件
             */
            // 文件是资源文件之一，在配置项可配置是否自动下载。

            // type:file

            // 特有属性
            // 没有特有属性
            if ($message['type'] === 'file') {
                // 下载文件至默认路径
                // File::download($message);

                // 回调下载
                // 尽管文件也支持自定义下载回调，但因为不清楚后缀，所以 强烈不建议使用

                // 直接传 $message 便能直接发送该 message 的文件
                File::send($message['from']['UserName'], $message);

                // 也可以选择一个文件路径
                // File::send($message['from']['UserName'], __DIR__.'/test.xlsx');

                Text::send($message['from']['UserName'], '收到文件：' . $message['title']);
            }

            /**
             * 位置
             */
            // type:location

            // 特有属性
            // 参数  类型  描述
            // url string  位置链接（腾讯地图）（共享位置时为空）
            if ($message['type'] === 'location') {
                // content 值
                // Location 的 content 值有两种情况。
                // 发送位置：地址文字信息
                // 共享位置：[共享位置]

                Text::send($message['from']['UserName'], $message['content']);
                Text::send($message['from']['UserName'], $message['url']);
            }

            /**
             * 撤回
             */
            // type:recall

            // 特有属性
            // 参数  类型  描述
            // origin  array   撤回的消息
            // nickname    string  上一条撤回消息者的昵称
            // if ($message['type'] === 'recall') {
            //     // 撤回的消息的内容
            //     Text::send($message['from']['UserName'], $message['origin']['content']);
            //     // 某某撤回了消息
            //     Text::send($message['from']['UserName'], $message['content']);
            //     // Text::send($message['from']['UserName'], $message['content'].' : '.$message['origin']['content']);
            //     if ($message['origin']['type'] === 'image') {
            //         Image::send($message['from']['UserName'], $message['origin']);
            //     } else if ($message['origin']['type'] === 'emoticon') {
            //         Emoticon::send($message['from']['UserName'], $message['origin']);
            //     } else if ($message['origin']['type'] === 'video') {
            //         Video::send($message['from']['UserName'], $message['origin']);
            //     } else if ($message['origin']['type'] === 'voice') {
            //         Voice::send($message['from']['UserName'], $message['origin']);
            //     }
            // }

            /**
             * 名片
             */
            // type:card

            // 特有属性
            // 参数  类型  描述
            // info    array   推荐信息
            // avatar  string  头像大图片
            // small_avatar    string  头像小图片
            // province    string  省(国内为省，国外为国.)
            // city    string  市
            // description string  介绍
            // is_official string  是否公众号
            if ($message['type'] === 'card') {
                Text::send($message['from']['UserName'], '收到名片:' . $message['avatar'] . $message['province'] .
                    $message['city'] . $message['description']);

                // 发送个人名片。发送个人名片第二个参数为微信号，第三个为显示的昵称，可自定义可为空。
                // Card::send($message['from']['UserName'], $alias, $nickname);

                // 发送公众号名片。发送公众号名片第二个参数为（微信号或者原始ID），第三个为显示的昵称（一定要正确）。
                // Card::send($message['from']['UserName'], $alias, $nickname);
            }

            /**
             * 红包
             */
            // type:red_packet

            // 特有属性
            // 没有特有属性
            if ($message['type'] === 'red_packet') {
                Text::send($message['from']['UserName'], $message['content']);
            }

            /**
             * 好友请求
             */
            // type:request_friend

            // 特有属性
            // 参数  类型  描述
            // info    array   请求好友信息
            // avatar  string  头像（需下载）
            // 获取好友实例
            // $friends = vbot('friends');
            // if ($message['type'] === 'request_friend') {
            //     // if ($message['info']['Content'] === 'echo') {
            //     // 同意添加好友
            //     $friends->approve($message);
            //     // }
            // }

            /**
             * 分享
             */
            // type:share

            // 特有属性
            // 参数  类型  描述
            // title   string  标题
            // description string  描述
            // app string  来源APP
            // url string  链接
            if ($message['type'] === 'share') {
                Text::send($message['from']['UserName'], '收到分享:' . $message['title'] . $message['description'] .
                    $message['app'] . $message['url']);
            }

            /**
             * 公众号
             */
            // type:official

            // 特有属性
            // 参数  类型  描述
            // title   string  标题
            // description string  描述
            // app string  公众号来源名称
            // url string  链接
            // articles    array   公众号文章列表 [[‘title’ => ‘标题’, ‘url’ => ‘链接’, ‘cover’ => ‘封面URL’], […]]
            // if ($message['type'] === 'official') {
            //     Text::send($message['from']['UserName'], '收到公众号:' . $message['title'] . $message['description'] . $message['app'] . $message['url']);
            // }

            /**
             * 点击
             */
            // 点击是机器人在账号在客户端中点击联系人便会触发的消息，很鸡肋。

            // type:touch

            // 特有属性
            // 没有特有属性
            if ($message['type'] === 'touch') {
                // Text::send($message['from']['ToUserName'], $message['content']);
            }

            /**
             * 转账
             */
            // type:transfer

            // 特有属性
            // 参数  类型  描述
            // fee string  转账金额（单位：元）
            // transcationId   string  转账ID
            // memo    string  转账备注
            if ($message['type'] === 'transfer') {
                Text::send($message['from']['UserName'], $message['content'] . ' 转账金额： ' . $message['fee'] .
                    ' 转账流水号：' . $message['transaction_id'] . ' 备注：' . $message['memo']);
            }

            /**
             * 新增好友
             */
            // type:new_friend

            // 特有属性
            // 没有特有属性
            // if ($message['type'] === 'new_friend') {
            //     // Text::send($message['from']['UserName'], $message['content']);
            //     Text::send($message['from']['UserName'], '客官，等你很久了！');
            // }

            /**
             * 群组变动
             */
            // type:group_change

            // 特有属性
            // 参数  类型  描述
            // action  string  ADD-增加成员 REMOVE-移除成员 RENAME-更改群名称 INVITE-被邀请进群 BE_REMOVE-被踢出群
            // inviter string  邀请者昵称（仅 ADD 时存在）
            // invited string  被邀请者昵称（仅 ADD 时存在）
            // if ($message['type'] === 'group_change') {
            //     Text::send($message['from']['UserName'], '欢迎新人 ' . $message['invited'] . PHP_EOL . '邀请人：' . $message['inviter']);
            // }

            /**
             * 小程序
             */
            // type:mina

            // 特有属性
            // 参数  类型  描述
            // title   string  小程序名称
            // url string  小程序介绍链接
            if ($message['type'] === 'mina') {
                Text::send($message['from']['UserName'], '收到小程序：' . $message['title'] . $message['url']);
            }
        }
    }
}
